//#include"smartptr.h"
//
//int main()
//{
//	wx::shared_ptr<int> sp1(new int);
//	wx::shared_ptr<int> sp2(sp1);
//
//	wx::shared_ptr<int> sp3(new int);
//
//	sp1 = sp1;
//	sp1 = sp2;
//	sp1 = sp3;
//
//	wx::shared_ptr<int> sp4;
//
//	wx::shared_ptr<int> sp5(new int[10], [](int* ptr) {delete[] ptr; });
//
//
//	return 0;
//}

#include<memory>
#include<iostream>

using namespace std;

struct ListNode
{
	int _val;
	weak_ptr<ListNode> _next;
	weak_ptr<ListNode> _prev;

	ListNode(int val=0)
		:_val(val)
	{ }

	~ListNode()
	{
		cout << "~ListNode" << endl;
	}
};

int main()
{
	shared_ptr<ListNode> n1(new ListNode(1));
	shared_ptr<ListNode> n2(new ListNode(2));

	cout << n1.use_count() << endl;
	cout << n2.use_count() << endl;

	n1->_next = n2;
	n2->_prev = n1;

	cout << n1.use_count() << endl;
	cout << n2.use_count() << endl;

	return 0;
}